Error: object 'rnms' not found
Mobility, Latent Trend and Omega for all states
- Mobility trend for all states (\(\phi\)). Covariate that describes human mobility. These data come from Unacast. We smooth the raw data from Unacast using a spline fit, resulting in the trajectories of human movement shown below. This covariate is used to reduce baseline transmission. Here we show the mobility trends from all 50 states. b) latent trend for all states (\(\psi\)). c) Relativie transmissibility (\(\omega\)) for all states. In each subplot, the read line is a non-weighted mean of all states.
Correlation between Omega and Prevalence
Sample period = March 1, 2020 through December 31, 2021
- predictor = omega(t); response = daily prevalence(t)
California, and mean across states, at varying lags
- predictor = AUC of omega over time; response = cumulative all infections over time
- predictor = AUC of omega; response = cumulative all infections


- map of same (correlation, by state)
To be made
Correlation between Mobility and Omega




R effective for all states
Cross Correlation among times series of R Effective

LS0tCnRpdGxlOiAiRmlndXJlcyIKb3V0cHV0OiBodG1sX25vdGVib29rCmF1dGhvcjogRXJpYyBNYXJ0eQotLS0KCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGluY2x1ZGU9VFJVRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LndpZHRoID0gIjEwMCUiKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGNvd3Bsb3QpCmxpYnJhcnkoeWFyZHN0aWNrKQojIGxpYnJhcnkoZ2dwdWJyKQpsaWJyYXJ5KGdnc3RhdHNwbG90KQpzb3VyY2UoaGVyZTo6aGVyZSgiY29kZS9yZXN1bHQtZXhwbG9yYXRpb24vZ2V0UmVmZi5SIikpCgpgYGAKCmBgYHtyIGRhdGF9CmFsbF9maWxlcyA8LSBsaXN0LmZpbGVzKHBhdGggPSBoZXJlOjpoZXJlKCJvdXRwdXQvY3VycmVudC8iKSwgcGF0dGVybiA9ICIuY3N2IikKcGFyYW1fZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gaGVyZTo6aGVyZSgib3V0cHV0L2N1cnJlbnQvIiksIHBhdHRlcm4gPSAicGFyYW1zLW5hdHVyYWwucmRzIikKc3RhdGVfc3VtbWFyaWVzIDwtIHRpYmJsZSgpCnN0YXRlX3BhcmFtZXRlcnMgPC0gdGliYmxlKCkKc3RhdGVfbG9nbGlrcyA8LSB0aWJibGUoKQpzdGF0ZWRmIDwtcmVhZFJEUyhoZXJlOjpoZXJlKCJvdXRwdXQvY3VycmVudCIsICJzdGF0ZWRmLnJkcyIpKQpzdGF0ZXZlYyA8LSBnc3ViKCIuY3N2IiwiIixhbGxfZmlsZXMpCmFsbHN0YXRlc19wb3AgPC0gc3RhdGVkZiAlPiUgZmlsdGVyKHN0YXRlX2Z1bGwgJWluJSBzdGF0ZXZlYykgJT4lIHB1bGwodG90YWxfcG9wKSAlPiUgc3VtKCkKCmZvcihpIGluIDE6bGVuZ3RoKGFsbF9maWxlcykpIHsKICBkb19maWxlIDwtIGFsbF9maWxlc1tpXQogIGxvY2F0aW9uIDwtIHN1YigiLmNzdiIsICIiLCBkb19maWxlKQogIHN0YXRlX21ldGFkYXRhIDwtIHN0YXRlZGYgJT4lIGZpbHRlcihzdGF0ZV9mdWxsID09IHN1YigiLmNzdiIsICIiLCBkb19maWxlKSkKICBzdGF0ZV9wb3AgPC0gc3RhdGVfbWV0YWRhdGEgJT4lIHB1bGwodG90YWxfcG9wKQogIHN0YXRlX2luaXRSMCA8LSBzdGF0ZV9tZXRhZGF0YSAlPiUgcHVsbChpbml0UjApCiAgc3RhdGVfYmV0YV9zIDwtIChzdGF0ZV9pbml0UjAqLjEpCiAgCiAgdG1wcGFyYW1maWxlIDwtIGhlcmU6OmhlcmUoIm91dHB1dC9jdXJyZW50IiwgcGFyYW1fZmlsZXNbaV0pCiAgIyB0bXBwYXJhbXMgPC0gcmVhZFJEUyh0bXBwYXJhbWZpbGUpCiAgIyB0bXBfbG9nbGlrIDwtIGRhdGEuZnJhbWUobG9jYXRpb24gPSB1bmlxdWUodG1wJGxvY2F0aW9uKSwKICAjICAgICAgICAgICAgICAgICAgICAgICBsb2dfbGlrID0gdG1wcGFyYW1zWyJMb2dMaWsiLCAyXSkKICAjIHJubXMgPC0gcm93Lm5hbWVzKHRtcHBhcmFtcykKICAjIHRtcHBhcmFtcyA8LSB0bXBwYXJhbXMgJT4lCiAgIyAgIG11dGF0ZShwYXJhbWV0ZXIgPSBybm1zKSAlPiUKICAjICAgZmlsdGVyKGlzX2ZpdHRlZCA9PSAieWVzIikgJT4lCiAgIyAgIGRwbHlyOjpzZWxlY3QoLWlzX2ZpdHRlZCkgJT4lCiAgIyAgIGdhdGhlcigia2V5IiwgInZhbHVlIiwgLXBhcmFtZXRlcikgJT4lCiAgIyAgIGZpbHRlcihrZXkgPT0gIlgxIikgJT4lCiAgIyAgIGRwbHlyOjpzZWxlY3QoLWtleSkgJT4lCiAgIyAgIG11dGF0ZShsb2NhdGlvbiA9IHVuaXF1ZSh0bXAkbG9jYXRpb24pKSAlPiUKICAjICAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgdmFsdWUsIHBhcmFtZXRlcikKICAjIAogICMgc3RhdGVfcGFyYW1ldGVycyA8LSBiaW5kX3Jvd3Moc3RhdGVfcGFyYW1ldGVycywgdG1wcGFyYW1zKQogICMgc3RhdGVfbG9nbGlrcyA8LSBiaW5kX3Jvd3Moc3RhdGVfbG9nbGlrcywgdG1wX2xvZ2xpaykKICAKICAjIHRtcCBzdGF0ZSBwYXJhbXMKICBzdGF0ZXBhcnMgPC0gcmVhZFJEUyh0bXBwYXJhbWZpbGUpIAoKICBzdGF0ZXBhcnNfZml4ZWQgPC0gc3RhdGVwYXJzICU+JSAKICAgIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAicGFyYW0iKSAlPiUgCiAgICBkcGx5cjo6ZmlsdGVyKGlzX2ZpdHRlZCA9PSAibm8iKSAlPiUgCiAgICBzZWxlY3QocGFyYW0sWDEpICU+JSAKICAgIHBpdm90X3dpZGVyKHZhbHVlc19mcm9tID0gWDEsIG5hbWVzX2Zyb20gPSBwYXJhbSkgJT4lIAogICAgc2VsZWN0KC1jKE1JRl9JRCwgTG9nTGlrLCBMb2dMaWtfU0UpKQoKICBzdGF0ZXBhcnNfZml0dGVkIDwtIHN0YXRlcGFycyAlPiUgCiAgICByb3duYW1lc190b19jb2x1bW4odmFyID0gInBhcmFtIikgJT4lIAogICAgZHBseXI6OmZpbHRlcihpc19maXR0ZWQgPT0gInllcyIpICU+JSAKICAgIHNlbGVjdChwYXJhbSxYMSkgJT4lIAogICAgcGl2b3Rfd2lkZXIodmFsdWVzX2Zyb20gPSBYMSwgbmFtZXNfZnJvbSA9IHBhcmFtKQogIAogIHN0YXRlcGFyc19hbGxtbGUgPC0gYmluZF9jb2xzKHN0YXRlcGFyc19maXhlZCxzdGF0ZXBhcnNfZml0dGVkKQogIAogICMgcmVzdWx0cwoKICB0bXBmaWxlIDwtIGhlcmU6OmhlcmUoIm91dHB1dC9jdXJyZW50IiwgZG9fZmlsZSkKICB0bXAgPC0gcmVhZC5jc3YodG1wZmlsZSkgJT4lIG11dGF0ZShkYXRlID0gYXMuRGF0ZShkYXRlKSkKICBmaXJzdGNhc2VkYXRlIDwtIHRtcCRkYXRlICU+JSBtaW4oKQogIHRtcCA8LSB0bXAgJT4lCiAgICBmaWx0ZXIoc2ltX3R5cGUgPT0gInN0YXR1c19xdW8iIHwgaXMubmEoc2ltX3R5cGUpLAogICAgICAgICAgIHZhcmlhYmxlICVpbiUgYygiZGFpbHlfY2FzZXMiLCAiZGFpbHlfZGVhdGhzIiwgImRhaWx5X2FsbF9pbmZlY3Rpb25zIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY3R1YWxfZGFpbHlfY2FzZXMiLCAiYWN0dWFsX2RhaWx5X2RlYXRocyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2JpbGl0eV90cmVuZCIsICJsYXRlbnRfdHJlbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucyIsICJjdW11bGF0aXZlX2RlYXRocyIpKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIHNpbV90eXBlLCBwZXJpb2QsIGRhdGUsIHZhcmlhYmxlLCBtZWFuX3ZhbHVlKSAlPiUgCiAgICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gdmFyaWFibGUsIHZhbHVlc19mcm9tID0gbWVhbl92YWx1ZSkgJT4lCiAgICBtdXRhdGUoYmV0YV9zID0gc3RhdGVfYmV0YV9zKSAlPiUgCiAgICAjIGNhbGN1bGF0ZSBwcmV2YWxlbmNlCiAgICBtdXRhdGUocHJldmFsZW5jZSA9IGRhaWx5X2FsbF9pbmZlY3Rpb25zIC8gKHN0YXRlX3BvcC1jdW11bGF0aXZlX2RlYXRocykpICU+JSAKICAgICMgY2FsY3VsYXRlIG9tZWdhCiAgICBtdXRhdGUob21lZ2EgPSBtb2JpbGl0eV90cmVuZCAqIGxhdGVudF90cmVuZCAqIGJldGFfcykgJT4lIAogICAgIyBjYWxjdWxhdGUgbWVhbiBTCiAgICBtdXRhdGUoc3VzY2VwdGlibGVfZnJhY3Rpb24gPSAoc3RhdGVfcG9wIC0gY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucykgLyAoc3RhdGVfcG9wIC0gY3VtdWxhdGl2ZV9kZWF0aHMpKSAlPiUgCiAgICAjIGNhbGN1bGF0ZSBxCiAgICBtdXRhdGUocSA9IGdldF9xKHQgPSBhcy5udW1lcmljKGRhdGUtZmlyc3RjYXNlZGF0ZSksIHBhcmFtcyA9IHN0YXRlcGFyc19hbGxtbGUpKSAlPiUKICAgICMgY2FsY3VsYXRlIHMKICAgIG11dGF0ZShzID0gZ2V0X3EodCA9IGFzLm51bWVyaWMoZGF0ZS1maXJzdGNhc2VkYXRlKSwgcGFyYW1zID0gc3RhdGVwYXJzX2FsbG1sZSkpICU+JQogICAgIyBjYWxjdWxhdGUgbWVhbiBSX2UKICAgIG11dGF0ZShSX2UgPSBnZXRSZWZmKFMgPSBzdXNjZXB0aWJsZV9mcmFjdGlvbiwgTiA9IDEsICMgd2hvbGUgcG9wdWxhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgb21lZ2EgPSBvbWVnYSwKICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBxLAogICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBzdGF0ZXBhcnNfYWxsbWxlKSkgJT4lCiAgICBwaXZvdF9sb25nZXIoY29scyA9ICFjKGxvY2F0aW9uLCBzaW1fdHlwZSwgcGVyaW9kLCBkYXRlKSwgCiAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidmFyaWFibGUiLCAKICAgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAibWVhbl92YWx1ZSIsCiAgICAgICAgICAgICAgICAgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKQoKICBzdGF0ZV9zdW1tYXJpZXMgPC0gYmluZF9yb3dzKHN0YXRlX3N1bW1hcmllcywgdG1wKSAjID8gd2FzIHRoaXMgbWlzc2luZz8KCiAgCn0KCiMgRml4ZWQgcGFyYW1ldGVycyB0YWJsZQpiZXRhc19uYW1lcyA8LSBybm1zW2dyZXAoImJbMC05XSsiLCBybm1zKV0gIyBmaW5kIHBhcmFtZXRlcnMgc3RhcnRpbmcgd2l0aCBiIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIKc3BsaW5lX2NvZWZmaWNpZW50cyA8LSBwYXN0ZSgiU3BsaW5lIGNvZWZmaWNpZW50IiwgZ3N1YigiYiIsIiIsIGJldGFzX25hbWVzKSkKbmFtZXMoc3BsaW5lX2NvZWZmaWNpZW50cykgPC0gYmV0YXNfbmFtZXMKCnBhcmFtc192ZWMgPC0gYyhNSUZfSUQgPSAiTUlGIGlkIiwgCiAgICAgICAgICAgICAgICBMb2dMaWsgPSAiTG9nIExpa2VsaWhvb2QiLCAKICAgICAgICAgICAgICAgIExvZ0xpa19TRSA9ICJTRSBvZiBMb2cgTGlrZWxpaG9vZCIsIAogICAgICAgICAgICAgICAgYmV0YV9zID0gIlRyYW5zbWlzc2lvbiByYXRlIiwKICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgVHJhbnNtaXNzaWJpbGl0eQogICAgICAgICAgICAgICAgZnJhY190cmFuc19lID0gIlJlbGF0aXZlIHRyYW5zbWlzc2liaWxpdHkgb2YgbGF0ZW50IGluZmVjdGlvbnMiLAogICAgICAgICAgICAgICAgZnJhY190cmFuc19hID0gIlJlbGF0aXZlIHRyYW5zbWlzc2liaWxpdHkgb2YgYXN5bXB0b21hdGljIGluZGl2aWR1YWxzIiwKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfYyA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGRldGVjdGVkIHN5bXB0b21hdGljIGluZGl2aWR1YWxzIHBvc3QtcmVwb3J0aW5nIiwKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfaCA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGhvc3BpdGFsaXplZCBpbmRpdmlkdWFscyIsCiAgICAgICAgICAgICAgICAjIFRpbWUgaW4gY29tcGFydG1lbnRzCiAgICAgICAgICAgICAgICB0aW1lX2UgPSAiVGltZSBzcGVudCBpbiBsYXRlbnQgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX2EgPSAiVGltZSBzcGVudCBpbiBhc3ltcHRvbWF0aWMgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX3N1ID0gIlRpbWUgc3BlbnQgaW4gc3ltcHRvbWF0aWMsIHVuZGV0ZWN0ZWQgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX3NkID0gIlRpbWUgc3BlbnQgaW4gc3ltcHRvbWF0aWMsIGRldGVjdGVkIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9jID0gIlRpbWUgc3BlbnQgaW4gZGlhZ25vc2VkIGNhc2VzIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9oID0gIlRpbWUgc3BlbnQgaW4gaG9zcGl0YWxpemVkIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgIyBEZXRlY3Rpb24gdGltZQogICAgICAgICAgICAgICAgbWF4X2RpYWdfZmFjdG9yID0gIk1heGltdW0gZm9yIGZhY3RvciBieSB3aGljaCBtb3ZlbWVudCB0aHJvdWdoIElzZCBoYXBwZW5zIGZhc3RlciAocXVpY2tlciBkaWFnbm9zaXMpIiwKICAgICAgICAgICAgICAgIGRpYWdfcmFtcHVwID0gIlJhdGUgYXQgd2hpY2ggZmFzdGVyIGRpYWdub3NpcyByYW1wcyB1cCB0byBtYXgiLAogICAgICAgICAgICAgICAgdF9oYWxmX2RpYWcgPSAiVGltZSBhdCB3aGljaCBkaWFnbm9zaXMgaXMgYXQgNTAlIG9mIG1heCAoaW4gZGF5cyBzaW5jZSB0ID0gMSkiLAogICAgICAgICAgICAgICAgIyBEZXRlY3Rpb24gZnJhY3Rpb24KICAgICAgICAgICAgICAgIG1heF9kZXRlY3RfZnJhYyA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGNhc2VzIHRoYXQgYXJlIGRldGVjdGVkIiwKICAgICAgICAgICAgICAgIGRldGVjdF9yYW1wdXAgPSAiU3BlZWQgYXQgd2hpY2ggZnJhY3Rpb24gZGV0ZWN0ZWQgcmFtcHMgdXAiLAogICAgICAgICAgICAgICAgdF9oYWxmX2RldGVjdCA9ICJUaW1lIGF0IHdoaWNoIGluZmVjdGlvbiBkZXRlY3Rpb24gZnJhY3Rpb24gaXMgYXQgNTAlIG9mIG1heCAoaW4gZGF5cyBzaW5jZSB0ID0gMSkiLAogICAgICAgICAgICAgICAgYmFzZV9kZXRlY3RfZnJhYyA9ICJNaW5pbXVtIGZyYWN0aW9uIGRldGVjdGVkIGF0IHQgPSAxIiwKICAgICAgICAgICAgICAgICMgRnJhY3Rpb24gYXN5bXB0b21hdGljCiAgICAgICAgICAgICAgICBmcmFjX2FzeW0gPSAiRnJhY3Rpb24gb2YgbGF0ZW50IGluZmVjdGlvbnMgdGhhdCBtb3ZlIHRvIGFzeW1wdG9tYXRpYyIsCiAgICAgICAgICAgICAgICAjIEZyYWN0aW9uIGhvc3B0aWxpemVkCiAgICAgICAgICAgICAgICBmcmFjX2hvc3AgPSAiRnJhY3Rpb24gb2YgZGV0ZWN0ZWQgY2FzZXMgdGhhdCBhcmUgaG9zcGl0YWxpemVkIiwKICAgICAgICAgICAgICAgICMgRnJhY3Rpb24gb2YgaG9zcGl0YWxpemF0aW9ucyB0aGF0IHJlc3VsdCBpbiBkZWF0aAogICAgICAgICAgICAgICAgbWluX2ZyYWNfZGVhZCA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGhvc3BpdGFsaXphdGlvbnMgdGhhdCByZXN1bHQgaW4gZGVhdGgiLAogICAgICAgICAgICAgICAgbWF4X2ZyYWNfZGVhZCA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGhvc3BpdGFsaXphdGlvbnMgdGhhdCByZXN1bHQgaW4gZGVhdGgiLAogICAgICAgICAgICAgICAgbG9nX2hhbGZfZGVhZCA9ICJUaW1lIGF0IHdoaWNoIGRlYXRoIGZyYWN0aW9uIGlzIGF0IDUwJSBvZiBtYXggKGluIGRheXMgc2luY2UgdCA9IDEpIiwKICAgICAgICAgICAgICAgICMgRGlzcGVyc2lvbiBwYXJhbWV0ZXJzCiAgICAgICAgICAgICAgICB0aGV0YV9jYXNlcyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgY2FzZSByZXBvcnRpbmcgb2JzZXJ2YXRpb24gcHJvY2VzcyIsCiAgICAgICAgICAgICAgICB0aGV0YV9ob3NwcyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgaG9zcGl0YWxpemF0aW9uIHJlcG9ydGluZyBvYnNlcnZhdGlvbiBwcm9jZXNzIiwKICAgICAgICAgICAgICAgIHRoZXRhX2RlYXRocyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZGVhdGggcmVwb3J0aW5nIG9ic2VyY2F0aW9uIHByb2Nlc3MiLAogICAgICAgICAgICAgICAgc2lnbWFfZHcgPSAiVmFyaWFuY2Ugb2YgdGhlIHN0b2NoYXN0aWNzIHByb2Nlc3Mgbm9pc2UiLAogICAgICAgICAgICAgICAgIyBTcGxpbmUgY29lZmZpY2llbnRzCiAgICAgICAgICAgICAgICBzcGxpbmVfY29lZmZpY2llbnRzLAogICAgICAgICAgICAgICAgIyBJbml0aWFsIGNvbmRpdGlvbnMKICAgICAgICAgICAgICAgIFNfMCA9ICJJbml0aWFsIG51bWJlciBvZiBzdXNjZXB0aWJsZSBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBFMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGxhdGVudCBpbmZlY3Rpb3VzIGluZGl2aWR1YWxzIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIElhMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGFzeW1wdG9tYXRpYyBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBJc3UxXzAgPSAiSW5pdGlhbCBudW1iZXIgb2Ygc3ltcHRvbWF0aWMsIHVuZGV0ZWN0ZWQgaW5kaXZpZHVhbHMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgSXNkMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIHN5bXB0b21hdGljLCBkZXRlY3RlZCBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBDMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGRpYWdub3NlZCBjYXNlcyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBIMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGhvc3BpdGFsaXplZCBjYXNlcyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBSXzAgPSAiSW5pdGlhbCBudW1iZXIgb2YgcmVjb3ZlcmVkIGluZGl2aWR1YWxzIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIERfMCA9ICJJbml0aWFsIG51bWJlciBvZiBkZWF0aHMgYWZ0ZXIgaG9zcGl0YWxpemF0aW9uIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIHRyZW5kX3N0YXJ0ID0gIlRyZW5kIikKCnRtcHBhcmFtcyA8LSByZWFkUkRTKHRtcHBhcmFtZmlsZSkKcm5tcyA8LSByb3cubmFtZXModG1wcGFyYW1zKQpwYXJhbXNfbWFwIDwtIHRpYmJsZShQYXJhbWV0ZXIgPSBuYW1lcyhwYXJhbXNfdmVjKSwKICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPSBwYXJhbXNfdmVjKQpmaXhlZF9wYXJhbWV0ZXJzIDwtIHRtcHBhcmFtcyAlPiUKICBtdXRhdGUoUGFyYW1ldGVyID0gcm5tcykgJT4lCiAgZmlsdGVyKGlzX2ZpdHRlZCA9PSAibm8iKSAlPiUKICBkcGx5cjo6c2VsZWN0KC1pc19maXR0ZWQpICU+JQogIGdhdGhlcigia2V5IiwgInZhbHVlIiwgLVBhcmFtZXRlcikgJT4lCiAgZmlsdGVyKGtleSA9PSAiWDEiKSAlPiUKICBsZWZ0X2pvaW4ocGFyYW1zX21hcCwgYnkgPSAiUGFyYW1ldGVyIikgJT4lCiAgZmlsdGVyKCFQYXJhbWV0ZXIgJWluJSBjKCJNSUZfSUQiLCAiTG9nTGlrIiwgIkxvZ0xpa19TRSIsICJ0cmVuZF9zdGFydCIsICJ0aGV0YV9ob3NwcyIsICJTXzAiKSkgJT4lCiAgZHBseXI6OnNlbGVjdChQYXJhbWV0ZXIsIERlc2NyaXB0aW9uLCB2YWx1ZSkgJT4lCiAgbXV0YXRlKFBhcmFtZXRlciA9IGlmZWxzZShQYXJhbWV0ZXIgPT0gIkUxXzAiLCAiTDFfMCIsIFBhcmFtZXRlcikpCgpmdXR1cmUgPC0gc3RhdGVfc3VtbWFyaWVzICU+JSBmaWx0ZXIocGVyaW9kID09ICJGdXR1cmUiKSAlPiUgcHVsbChkYXRlKSAlPiUgcmFuZ2UoKQpidXJuaW4gPC0gYyhzdGF0ZV9zdW1tYXJpZXMgJT4lIHB1bGwoZGF0ZSkgJT4lIG1pbigpLCBhcy5EYXRlKCIyMDIwLTAzLTAxIikpCnNhbXBsZV9wZXJpb2QgPC0gYyhhcy5EYXRlKCIyMDIwLTAzLTAxIiksYXMuRGF0ZSgiMjAyMC0xMi0zMSIpKQoKCmBgYAoKIyBNb2JpbGl0eSwgTGF0ZW50IFRyZW5kIGFuZCBPbWVnYSBmb3IgYWxsIHN0YXRlcwoKYSkgTW9iaWxpdHkgdHJlbmQgZm9yIGFsbCBzdGF0ZXMgKCRccGhpJCkuIENvdmFyaWF0ZSB0aGF0IGRlc2NyaWJlcyBodW1hbiBtb2JpbGl0eS4gVGhlc2UgZGF0YSBjb21lIGZyb20gPGEgaHJlZj0iaHR0cHM6Ly93d3cudW5hY2FzdC5jb20vIiB0YXJnZXQ9Il9ibGFuayI+VW5hY2FzdDwvYT4uIFdlIHNtb290aCB0aGUgcmF3IGRhdGEgZnJvbSBVbmFjYXN0IHVzaW5nIGEgc3BsaW5lIGZpdCwgcmVzdWx0aW5nIGluIHRoZSB0cmFqZWN0b3JpZXMgb2YgaHVtYW4gbW92ZW1lbnQgc2hvd24gYmVsb3cuIFRoaXMgY292YXJpYXRlIGlzIHVzZWQgdG8gcmVkdWNlIGJhc2VsaW5lIHRyYW5zbWlzc2lvbi4gSGVyZSB3ZSBzaG93IHRoZSBtb2JpbGl0eSB0cmVuZHMgZnJvbSBhbGwgNTAgc3RhdGVzLiBiKSBsYXRlbnQgdHJlbmQgZm9yIGFsbCBzdGF0ZXMgKCRccHNpJCkuIGMpIFJlbGF0aXZpZSB0cmFuc21pc3NpYmlsaXR5ICgkXG9tZWdhJCkgZm9yIGFsbCBzdGF0ZXMuIEluIGVhY2ggc3VicGxvdCwgdGhlIHJlYWQgbGluZSBpcyBhIG5vbi13ZWlnaHRlZCBtZWFuIG9mIGFsbCBzdGF0ZXMuCgpgYGB7ciBjb3ZhcmlhdGUsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTcsIGV2YWwgPSBUUlVFfQphbGxfcGhpIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gIm1vYmlsaXR5X3RyZW5kIikgJT4lCiAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgZGF0ZSwgbWVhbl92YWx1ZSkgJT4lCiAgcmVuYW1lKHBoaSA9IG1lYW5fdmFsdWUpICU+JSAKICBmaWx0ZXIoZGF0ZSA8PSBTeXMuRGF0ZSgpKQoKbWVhbl9waGkgPC0gYWxsX3BoaSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcmlzZShwaGkgPSBtZWFuKHBoaSkpCgpnX3BoaSA8LSBnZ3Bsb3QoYWxsX3BoaSwgYWVzKHggPSBkYXRlLCB5ID0gcGhpLCBjb2xvciA9IGxvY2F0aW9uKSkgKwogIGdlb21fbGluZShzaXplID0gMC41KSArCiAgIyB5bGFiKCJIdW1hbiBtb3ZlbWVudFxuKCUgb2Ygbm9ybWFsKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBtZWFuX3BoaSwgYWxwaGEgPSAuNiwgc2l6ZSA9IDIsIGNvbG9yID0gJ3JlZCcpICsKICAjIGdlb21fcmVjdChhZXMoeG1pbj1mdXR1cmVbMV0sIHhtYXg9ZnV0dXJlWzJdLCB5bWluPTAsIHltYXg9MSkpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSBmdXR1cmVbMV0sIHhtYXggPSBmdXR1cmVbMl0sIHltaW4gPSAwLCB5bWF4ID0gMSwgYWxwaGEgPSAuMikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpCgpwX3BoaSA8LSBnX3BoaSAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpICU+JSAKICBwbG90bHk6OmxheW91dChzaG93bGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgIyBtYXJnaW4gPSBsaXN0KGwgPSAxNTApLAogICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQaGkiKQogICAgICAgICAgICAgICAgICkKCnBfcGhpJHgkZGF0YVtbNTFdXSR0ZXh0IDwtIGdzdWIoJ3JlZCcsJ01lYW4gb2YgYWxsIHN0YXRlcycsIHBfcGhpJHgkZGF0YVtbNTFdXSR0ZXh0KQoKIyBwX3BoaQpgYGAKCgpgYGB7cn0KYWxsX3BzaSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHZhcmlhYmxlID09ICJsYXRlbnRfdHJlbmQiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICByZW5hbWUocHNpID0gbWVhbl92YWx1ZSkgJT4lIAogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpCgptZWFuX3BzaSA8LSBhbGxfcHNpICU+JSBncm91cF9ieShkYXRlKSAlPiUgc3VtbWFyaXNlKHBzaSA9IG1lYW4ocHNpKSkKCmdfcHNpIDwtIGdncGxvdChhbGxfcHNpLCBhZXMoeCA9IGRhdGUsIHkgPSBwc2ksIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkxhdGVudCB0cmVuZFxuKCUgb2Ygbm9ybWFsKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBtZWFuX3BzaSwgYWxwaGEgPSAuNiwgc2l6ZSA9IDIsIGNvbG9yID0gJ3JlZCcpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSBmdXR1cmVbMV0sIHhtYXggPSBmdXR1cmVbMl0sIHltaW4gPSAwLCB5bWF4ID0gMSwgYWxwaGEgPSAuMikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpCgpwX3BzaSA8LSBnX3BzaSAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpICU+JSAKICBwbG90bHk6OmxheW91dChzaG93bGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgIyBtYXJnaW4gPSBsaXN0KGwgPSAxNTApLAogICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQc2kiKQogICAgICAgICAgICAgICAgICkKCnBfcHNpJHgkZGF0YVtbNTFdXSR0ZXh0IDwtIGdzdWIoJ3JlZCcsJ01lYW4gb2YgYWxsIHN0YXRlcycsIHBfcHNpJHgkZGF0YVtbNTFdXSR0ZXh0KQoKIyBwX3BzaQpgYGAKCgpgYGB7cn0KYWxsX29tZWdhIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gIm9tZWdhIikgJT4lCiAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgZGF0ZSwgbWVhbl92YWx1ZSkgJT4lCiAgcmVuYW1lKG9tZWdhID0gbWVhbl92YWx1ZSkgJT4lIAogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpCgptZWFuX29tZWdhIDwtIGFsbF9vbWVnYSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcmlzZShvbWVnYSA9IG1lYW4ob21lZ2EpKQoKZ19vbWVnYSA8LSBnZ3Bsb3QoYWxsX29tZWdhLCBhZXMoeCA9IGRhdGUsIHkgPSBvbWVnYSwgY29sb3IgPSBsb2NhdGlvbikpICsKICBnZW9tX2xpbmUoc2l6ZSA9IDAuNSkgKwogICMgeWxhYigiTGF0ZW50IHRyZW5kXG4oJSBvZiBub3JtYWwpIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfZChvcHRpb24gPSAiRCIsIGRpcmVjdGlvbiA9IC0xLCBhbHBoYSA9IC42LCBlbmQgPSAuNzUpICsKICAjIHRoZW1lX2RhcmsoYmFzZV9saW5lX3NpemUgPSAwLjUpICsKICBnZW9tX2xpbmUoZGF0YSA9IG1lYW5fb21lZ2EsIGFscGhhID0gLjYsIHNpemUgPSAyLCBjb2xvciA9ICdyZWQnKSArCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gZnV0dXJlWzFdLCB4bWF4ID0gZnV0dXJlWzJdLCB5bWluID0gMCwgeW1heCA9IDEsIGFscGhhID0gLjIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGd1aWRlcyhjb2xvciA9IEZBTFNFKQoKcF9vbWVnYSA8LSBnX29tZWdhICU+JSBwbG90bHk6OmdncGxvdGx5KCkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHNob3dsZWdlbmQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAjIG1hcmdpbiA9IGxpc3QobCA9IDE1MCksCiAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk9tZWdhIikKICAgICAgICAgICAgICAgICApCgpwX29tZWdhJHgkZGF0YVtbNTFdXSR0ZXh0IDwtIGdzdWIoJ3JlZCcsJ01lYW4gb2YgYWxsIHN0YXRlcycsIHBfb21lZ2EkeCRkYXRhW1s1MV1dJHRleHQpCgojIHBfb21lZ2EKYGBgCgpgYGB7cn0KcGxvdGx5OjpzdWJwbG90KHBfcGhpLCBwX3BzaSwgcF9vbWVnYSwgbnJvd3MgPSAzLCBzaGFyZVggPSBUUlVFLCB0aXRsZVkgPSBUUlVFKQpgYGAKCiMgQ29ycmVsYXRpb24gYmV0d2VlbiBPbWVnYSBhbmQgUHJldmFsZW5jZQoKU2FtcGxlIHBlcmlvZCA9IE1hcmNoIDEsIDIwMjAgdGhyb3VnaCBEZWNlbWJlciAzMSwgMjAyMQoKYSkgcHJlZGljdG9yID0gb21lZ2EodCk7IHJlc3BvbnNlID0gZGFpbHkgcHJldmFsZW5jZSh0KQoKYGBge3J9CgphbGxfcHJldmFsZW5jZSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHBlcmlvZCA9PSAiUGFzdCIpICU+JQogIGZpbHRlcihiZXR3ZWVuKGRhdGUsIHNhbXBsZV9wZXJpb2RbMV0sIHNhbXBsZV9wZXJpb2RbMl0pKSAlPiUgCiAgZmlsdGVyKHZhcmlhYmxlID09ICJwcmV2YWxlbmNlIikgJT4lCiAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgZGF0ZSwgbWVhbl92YWx1ZSkgJT4lCiAgcmVuYW1lKHByZXZhbGVuY2UgPSBtZWFuX3ZhbHVlKSAlPiUgCiAgZmlsdGVyKGRhdGUgPD0gU3lzLkRhdGUoKSkKCm1lYW5fYWxsX3ByZXZhbGVuY2UgPC0gYWxsX3ByZXZhbGVuY2UgJT4lIGdyb3VwX2J5KGRhdGUpICU+JSBzdW1tYXJpc2UocHJldmFsZW5jZSA9IG1lYW4ocHJldmFsZW5jZSkpCiMgcGxvdCh4ID0gbWVhbl9vbWVnYSRtZWFuX3ZhbHVlLCB5ID0gbWVhbl9hbGxfcHJldmFsZW5jZSRwcmV2YWxlbmNlKQoKbWVhbnMgPC0gbWVhbl9waGkgJT4lIAogIGZ1bGxfam9pbihtZWFuX3BzaSkgJT4lIAogIGZ1bGxfam9pbihtZWFuX29tZWdhKSAlPiUgCiAgZnVsbF9qb2luKG1lYW5fYWxsX3ByZXZhbGVuY2UpCgpzdGF0ZV9zdW1tYXJpZXNfd2lkZSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHBlcmlvZCA9PSAiUGFzdCIpICU+JQogIGZpbHRlcihiZXR3ZWVuKGRhdGUsIHNhbXBsZV9wZXJpb2RbMV0sIHNhbXBsZV9wZXJpb2RbMl0pKSAlPiUgCiAgZmlsdGVyKHNpbV90eXBlID09ICdzdGF0dXNfcXVvJykgJT4lIAogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSB2YXJpYWJsZSwgdmFsdWVzX2Zyb20gPSBtZWFuX3ZhbHVlKSAlPiUgCiAgZ3JvdXBfYnkobG9jYXRpb24pICU+JSAKICBtdXRhdGUoQVVfb21lZ2EgPSBjdW1zdW0ob21lZ2EpKQoKQ0EgPC0gc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIGZpbHRlcihsb2NhdGlvbiA9PSAiQ2FsaWZvcm5pYSIpCgpsYWdmaWxsIDwtIGZ1bmN0aW9uKHgsIGxhZyxmaWxsPTEpIHsKICByZXBsYWNlX25hKGxhZyh4LGxhZyksZmlsbCkKfQoKQ0EgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlKSkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkNhbGlmb3JuaWEiLHhheGlzPWxpc3QodGl0bGU9Im9tZWdhIikseWF4aXM9bGlzdCh0aXRsZT0icHJldmFsZW5jZSIpKQoKc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIGNvbG9yID0gfmxvY2F0aW9uLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlLCAnPC9icj4gU3RhdGU6ICcsIGxvY2F0aW9uICkpICU+JSAKICAgIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkFsbCBzdGF0ZXMiLCB4YXhpcz1saXN0KHRpdGxlPSJvbWVnYSIpLHlheGlzPWxpc3QodGl0bGU9InByZXZhbGVuY2UiKSkKCm1lYW5zICU+JSBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5vbWVnYSwgeSA9IH5wcmV2YWxlbmNlLCAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBPbWVnYTogJywgb21lZ2EsICc8L2JyPiBwcmV2YWxlbmNlOiAnLCBwcmV2YWxlbmNlLCAnPC9icj4gRGF0ZTogJywgZGF0ZSApKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiTWVhbiBvbWVnYSwgbWVhbiBwcmV2YWxlbmNlIChhY3Jvc3Mgc3RhdGVzKSIseGF4aXM9bGlzdCh0aXRsZT0ib21lZ2EiKSx5YXhpcz1saXN0KHRpdGxlPSJwcmV2YWxlbmNlIikpCgpgYGAKCi0tLQoKQ2FsaWZvcm5pYSwgYW5kIG1lYW4gYWNyb3NzIHN0YXRlcywgYXQgdmFyeWluZyBsYWdzCgpgYGB7cn0KQ0EgJT4lIGZpbHRlcihwZXJpb2QgPT0gJ1Bhc3QnKSAlPiUgCiAgZmlsdGVyKGJldHdlZW4oZGF0ZSwgc2FtcGxlX3BlcmlvZFsxXSwgc2FtcGxlX3BlcmlvZFsyXSkpICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+bGFnZmlsbChvbWVnYSwwKSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAwIiwKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgdGV4dCA9IH5wYXN0ZSgnPC9icj4gT21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gcHJldmFsZW5jZTogJywgcHJldmFsZW5jZSwgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDcpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDciKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDE0KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAxNCIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMjEpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDIxIikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwyOCksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMjgiKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQ2FsaWZvcm5pYSwgb21lZ2EgYXQgdmFyeWluZyBsYWdzIiwgeGF4aXMgPSBsaXN0KHRpdGxlID0gIm9tZWdhIikpCgptZWFucyAlPiUgZmlsdGVyKGRhdGUgPCBmdXR1cmVbMV0pICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+bGFnZmlsbChvbWVnYSwwKSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAwIiwKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgdGV4dCA9IH5wYXN0ZSgnPC9icj4gT21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gcHJldmFsZW5jZTogJywgcHJldmFsZW5jZSwgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDcpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDciKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDE0KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAxNCIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMjEpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDIxIikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwyOCksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMjgiKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiTWVhbiBvbWVnYSwgbWVhbiBwcmV2YWxlbmNlIChhY3Jvc3Mgc3RhdGVzKVxub21lZ2EgYXQgdmFyeWluZyBsYWdzIiwgeGF4aXMgPSBsaXN0KHRpdGxlID0gIm9tZWdhIikpCgpgYGAKCi0tLQoKYikgcHJlZGljdG9yID0gQVVDIG9mIG9tZWdhIG92ZXIgdGltZTsgcmVzcG9uc2UgPSBjdW11bGF0aXZlIGFsbCBpbmZlY3Rpb25zIG92ZXIgdGltZQoKYGBge3J9CgpDQSAlPiUgZmlsdGVyKHBlcmlvZCA9PSAnUGFzdCcpICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+bGFnZmlsbChBVV9vbWVnYSwwKSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBuYW1lID0gJ2xhZyAwJywgCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gQXJlYSB1bmRlciBPbWVnYTogJywgQVVfb21lZ2EsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zOiAnLCBjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKEFVX29tZWdhLDcpLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAibGFnIDciKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKEFVX29tZWdhLDE0KSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBuYW1lID0gImxhZyAxNCIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsMjEpLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAibGFnIDIxIikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChBVV9vbWVnYSwyOCksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICJsYWcgMjgiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKEFVX29tZWdhLDU2KSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBuYW1lID0gImxhZyA1NiIpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJDYWxpZm9ybmlhLCBhcmVhIHVuZGVyIG9tZWdhIGF0IHZhcnlpbmcgbGFncyIseGF4aXM9bGlzdCh0aXRsZT0iQXJlYSB1bmRlciBvbWVnYSIpLHlheGlzPWxpc3QodGl0bGU9IkN1bXVsYXRpdmUgaW5mZWN0aW9ucyIpKQoKc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIGZpbHRlcihwZXJpb2QgPT0gJ1Bhc3QnKSAlPiUgCiAgZmlsdGVyKGRhdGUgPiBidXJuaW5bMl0pICU+JQogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKEFVX29tZWdhLDApLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIGNvbG9yID0gfmxvY2F0aW9uLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IEFyZWEgdW5kZXIgT21lZ2E6ICcsIEFVX29tZWdhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IEN1bXVsYXRpdmUgaW5mZWN0aW9uczogJywgY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBEYXRlOiAnLCBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gU3RhdGU6ICcsIGxvY2F0aW9uKSkgJT4lIAogICAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQWxsIHN0YXRlcyIsIHhheGlzPWxpc3QodGl0bGU9IkFyZWEgdW5kZXIgb21lZ2EgKGxhZyAwKSIpLCB5YXhpcz1saXN0KHRpdGxlPSJDdW11bGF0aXZlIGluZmVjdGlvbnMiKSkKCgpgYGAKCi0tLQoKYykgcHJlZGljdG9yID0gQVVDIG9mIG9tZWdhOyByZXNwb25zZSA9IGN1bXVsYXRpdmUgYWxsIGluZmVjdGlvbnMKCmBgYHtyfQojIHN0YXRlX3N1bW1hcmllc193aWRlICU+JSAKIyAgIGZpbHRlcihwZXJpb2QgPT0gJ1Bhc3QnKSAlPiUKIyAgIGZpbHRlcihkYXRlID4gYnVybmluWzJdKSAlPiUKIyAgIGdyb3VwX2J5KGxvY2F0aW9uKSAlPiUgCiMgICBzdW1tYXJpc2UoQVVfb21lZ2EgPSBtYXgoQVVfb21lZ2EpLCBjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zID0gbWF4KGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMpKSAlPiUgCiMgICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKIyAgICAgICAgICAgICAgICAgeCA9IH5BVV9vbWVnYSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLAojICAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAojICAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBBcmVhIHVuZGVyIE9tZWdhOiAnLCBBVV9vbWVnYSwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IEN1bXVsYXRpdmUgaW5mZWN0aW9uczogJywgY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IFN0YXRlOiAnLCBsb2NhdGlvbikpICU+JSAKIyAgICAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQ29ycmVsYXRpb24gb2YgY3VtdWxhdGl2ZSBpbmZlY3Rpb24gd2l0aCBBcmVhIHVuZGVyIG9tZWdhIiwgeGF4aXM9bGlzdCh0aXRsZT0iQXJlYSB1bmRlciBvbWVnYSIpLCB5YXhpcz1saXN0KHRpdGxlPSJDdW11bGF0aXZlIGluZmVjdGlvbnMiKSkKCnN0YXRlX3N1bW1hcmllc193aWRlICU+JSAKICBmaWx0ZXIocGVyaW9kID09ICdQYXN0JykgJT4lCiMgIGZpbHRlcihkYXRlID4gYnVybmluWzJdKSAlPiUKICBmaWx0ZXIoZGF0ZSA+PSBzYW1wbGVfcGVyaW9kWzFdICYgZGF0YSA8PSBzYW1wbGVfcGVyaW9kWzJdKSAlPiUgCiAgZ3JvdXBfYnkobG9jYXRpb24pICU+JSAKICBzdW1tYXJpc2UoQVVfb21lZ2EgPSBtYXgoQVVfb21lZ2EpLCBjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zID0gbWF4KGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMpKSAlPiUgCiAgZ2dzdGF0c3Bsb3Q6Omdnc2NhdHRlcnN0YXRzKHggPSAiQVVfb21lZ2EiLCB5ID0gImN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMiLCB0eXBlID0gInNwZWFybWFuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNvcnJlbGF0aW9uIG9mIGN1bXVsYXRpdmUgaW5mZWN0aW9ucyB3aXRoIEFyZWEgdW5kZXIgb21lZ2EiKQoKYGBgCgotLS0KCmUpIG1hcCBvZiBzYW1lIChjb3JyZWxhdGlvbiwgYnkgc3RhdGUpCgpUbyBiZSBtYWRlCgojIENvcnJlbGF0aW9uIGJldHdlZW4gTW9iaWxpdHkgYW5kIE9tZWdhCgpgYGB7cn0KCkNBICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+bW9iaWxpdHlfdHJlbmQsIHkgPSB+b21lZ2EsIAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE1vYmlsaXR5OiAnLCBtb2JpbGl0eV90cmVuZCwgJzwvYnI+IG9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQ2FsaWZvcm5pYSIseGF4aXM9bGlzdCh0aXRsZT0ibW9iaWxpdHkgdHJlbmQiKSx5YXhpcz1saXN0KHRpdGxlPSJvbWVnYSIpKQoKQ0EgJT4lIHVuZ3JvdXAoKSAlPiUgZmlsdGVyKGRhdGUgPCBmdXR1cmVbMV0pICU+JSAKICBmaWx0ZXIoZGF0ZSA+IGJ1cm5pblsyXSkgJT4lCiAgc2VsZWN0KGRhdGUsbW9iaWxpdHlfdHJlbmQsb21lZ2EpICU+JSAKICBnZ3N0YXRzcGxvdDo6Z2dzY2F0dGVyc3RhdHMoeCA9ICJtb2JpbGl0eV90cmVuZCIsIHkgPSAib21lZ2EiLCB0eXBlID0gInNwZWFybWFuIiwgdGl0bGUgPSAiQ2FsaWZvcm5pYSIpCgoKc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5tb2JpbGl0eV90cmVuZCwgeSA9IH5vbWVnYSwgY29sb3IgPSB+bG9jYXRpb24sCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gTW9iaWxpdHk6ICcsIG1vYmlsaXR5X3RyZW5kLCAnPC9icj4gb21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gRGF0ZTogJywgZGF0ZSwgJzwvYnI+IFN0YXRlOiAnLCBsb2NhdGlvbiApKSAlPiUKICAgIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkFsbCBzdGF0ZXMiLCB4YXhpcz1saXN0KHRpdGxlPSJtb2JpbGl0eSB0cmVuZCIpLHlheGlzPWxpc3QodGl0bGU9Im9tZWdhIikpCgptZWFucyAlPiUgCiAgZmlsdGVyKGRhdGUgPCBmdXR1cmVbMV0pICU+JSAKICBmaWx0ZXIoZGF0ZSA+IGFzLkRhdGUoIjIwMjAtMDItMjUiKSkgJT4lICMgRmViIDI2IGlzIHRoZSBmaXJzdCBkYXkgd2l0aCBhbnkgbW9iaWxpdHkgPCAxCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfnBoaSwgeSA9IH5vbWVnYSwgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gTW9iaWxpdHk6ICcsIHBoaSwgJzwvYnI+IG9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiTWVhbiBtb2JpbGl0eSwgbWVhbiBvbWVnYSAoYWNyb3NzIHN0YXRlcykiLHhheGlzPWxpc3QodGl0bGU9Im1vYmlsaXR5IHRyZW5kIikseWF4aXM9bGlzdCh0aXRsZT0ib21lZ2EiKSkKCmBgYAoKYGBge3J9CiMgbWVhbnMgJT4lIGZpbHRlcihkYXRlIDwgZnV0dXJlWzFdKSAlPiUgCiMgICBmaWx0ZXIoZGF0ZSA+IGJ1cm5pblsyXSkgJT4lCiMgICBnZ3NjYXR0ZXJoaXN0KHggPSAicGhpIiwgeSA9ICJvbWVnYSIsIAojICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgc2hhcGUgPSAxOSwgc2l6ZSA9IDMsICMgcG9pbnRzCiMgICAgICAgICAgIGFkZCA9ICJyZWcubGluZSIsIAojICAgICAgICAgICBhZGQucGFyYW1zID0gbGlzdChjb2xvciA9ICJibHVlIiwgZmlsbCA9ICJsaWdodGdyYXkiKSwKIyAgICAgICAgICAgY29uZi5pbnQgPSBUUlVFLCAKIyAgICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IubWV0aG9kID0gInNwZWFybWFuIiwKIyAgICAgICAgICAgeGxhYiA9ICJtb2JpbGl0eSB0cmVuZCIsIHlsYWIgPSAib21lZ2EiLAojICAgICAgICAgICBtYXJnaW4ucGxvdCA9ICJkZW5zaXR5IiwKIyAgICAgICAgICAgbWFyZ2luLmdndGhlbWUgPSB0aGVtZV92b2lkKCksCiMgICAgICAgICAgIG1hcmdpbi5zcGFjZSA9IEZBTFNFLAojICAgICAgICAgICBtYWluLnBsb3Quc2l6ZSA9IDIsCiMgICAgICAgICAgIG1hcmdpbi5wbG90LnNpemUgPSAxCiMgICAgICAgICAgICkKCm1lYW5zICU+JSBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIGZpbHRlcihkYXRlID4gYnVybmluWzJdKSAlPiUKICBnZ3N0YXRzcGxvdDo6Z2dzY2F0dGVyc3RhdHMoeCA9ICJwaGkiLCB5ID0gIm9tZWdhIiwgdHlwZSA9ICJzcGVhcm1hbiIsIHRpdGxlID0gIk1lYW4gcGhpLCBNZWFuIG9tZWdhIG92ZXIgYWxsIHN0YXRlcyIpCgoKYGBgCgojIFIgZWZmZWN0aXZlIGZvciBhbGwgc3RhdGVzCgpgYGB7ciBSX2VmZmVjdGl2ZSwgZmlnLmhlaWdodD0zLCBmaWcud2lkdGg9NywgZXZhbCA9IFRSVUV9CmFsbF9yZSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHZhcmlhYmxlID09ICJSX2UiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICByZW5hbWUoUl9lID0gbWVhbl92YWx1ZSkgJT4lIAogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpICU+JSAKICBsZWZ0X2pvaW4oc3RhdGVkZiwgYnk9YygibG9jYXRpb24iID0gInN0YXRlX2Z1bGwiKSkgJT4lIAogIG11dGF0ZShyZWxhdGl2ZV9wb3AgPSB0b3RhbF9wb3AgLyBhbGxzdGF0ZXNfcG9wKQoKbWVhbl9yZSA8LSBhbGxfcmUgJT4lIGdyb3VwX2J5KGRhdGUpICU+JSBzdW1tYXJpc2UoUl9lID0gbWVhbihSX2UpKQoKd2VpZ2h0ZWRfbWVhbl9yZSA8LSBhbGxfcmUgJT4lIGdyb3VwX2J5KGRhdGUpICU+JSBzdW1tYXJpc2UoUl9lID0gc3VtKFJfZSpyZWxhdGl2ZV9wb3ApKQoKZ19yZSA8LSBnZ3Bsb3QoYWxsX3JlLCBhZXMoeCA9IGRhdGUsIHkgPSBSX2UsIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkh1bWFuIG1vdmVtZW50XG4oJSBvZiBub3JtYWwpIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsNSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSB3ZWlnaHRlZF9tZWFuX3JlLCBhbHBoYSA9IC42LCBzaXplID0gMiwgY29sb3IgPSAncmVkJykgKwogICMgZ2VvbV9yZWN0KGFlcyh4bWluPWZ1dHVyZVsxXSwgeG1heD1mdXR1cmVbMl0sIHltaW49MCwgeW1heD0xKSkgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGZ1dHVyZVsxXSwgeG1heCA9IGZ1dHVyZVsyXSwgeW1pbiA9IDAsIHltYXggPSA1LCBhbHBoYSA9IC4yKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpCgpwX3JlIDwtIGdfcmUgJT4lIHBsb3RseTo6Z2dwbG90bHkoKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQoc2hvd2xlZ2VuZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICMgbWFyZ2luID0gbGlzdChsID0gMTUwKSwKICAgICAgICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUl9lIikKICAgICAgICAgICAgICAgICApCgpwX3JlJHgkZGF0YVtbNTFdXSR0ZXh0IDwtIGdzdWIoJ3JlZCcsJ1dlaWdodGVkIG1lYW4gb2YgYWxsIHN0YXRlcycsIHBfcmUkeCRkYXRhW1s1MV1dJHRleHQpCgpwX3JlCmBgYAoKCiMgQ3Jvc3MgQ29ycmVsYXRpb24gYW1vbmcgdGltZXMgc2VyaWVzIG9mIFIgRWZmZWN0aXZlCgpgYGB7cn0KYWxsX3JlX3dpZGUgPC0gYWxsX3JlICU+JSAKICBzZWxlY3QoZGF0ZSwgbG9jYXRpb24sIFJfZSkgJT4lIAogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBsb2NhdGlvbiwgdmFsdWVzX2Zyb20gPSBSX2UpICU+JSAKICBzZWxlY3QoLWRhdGUpCgoKCmNjZm1hdHJpeCA8LSBmdW5jdGlvbih4KXsKICAjIGluaXQgbWF0cml4IG9mIGFjZiBvYmplY3RzIGFuZCBtYXRyaXggb2YgZ2dwbG90cwogIG1saXN0IDwtIGdsaXN0IDwtIG1hdHJpeChsaXN0KCksIG5jb2wgPSBuY29sKHgpLCBucm93ID0gbmNvbCh4KSkKICAKICAjIGZpbGwgbWF0cml4IHdpdGggcGFpcndpc2UgY3Jvc3MgY29ycmVsYXRpb24gZnVuY3Rpb25zCiAgZm9yKGkgaW4gMTpuY29sKHgpKXsKICAgIGZvcihqIGluIDE6bmNvbCh4KSl7CiAgICAgIGNjZiA8LSBjY2YoeCA9IHhbLGldLCB5PSB4WyxqXSwgbmEuYWN0aW9uID0gbmEucGFzcywgeWxhYiA9ICJDQ0YiLCBwbG90ID0gRkFMU0UpCiAgICAgIGcgPC0gZ2dwbG90Mjo6YXV0b3Bsb3QoY2NmKSt5bGltKC0xLDEpK2xhYnModGl0bGU9cGFzdGUwKGksIiAiLCBqKSwgeCA9ICIiLCB5PSIiKQogICAgICBtbGlzdFtpLGpdIDwtIGxpc3QoY2NmKQogICAgICBnbGlzdFtqLGldIDwtIGxpc3QoZykKICAgIH0KICB9CiAgcmV0dXJuKGxpc3QoZGF0YT1tbGlzdCxwbG90cz1nbGlzdCkpCn0KCiMgY2FsY3VsYXRlIGNyb3NzIGNvcnJlbGF0aW9uIGZ1bmN0aW9ucyBmb3IgZWFjaCBzdGF0ZSBwYWlyCnJlX2NjZl9tYXRyaXggPC0gY2NmbWF0cml4KGFsbF9yZV93aWRlKQogIAojIHBsb3QgQ0NGIGZvciBhIHBhaXIgb2Ygc3RhdGVzCiMgZzEgPC0gcmVfY2NmX21hdHJpeFsxLDJdW1sxXV0gJT4lIGdncGxvdDI6OmF1dG9wbG90KCkrbGFicyh0aXRsZT0iIiwgeCA9ICIiLCB5PSIiKQoKZ3JvYnMgPC0gbGlzdChnMSxnMSxnMSxnMSkKCmdyb2JzIDwtIHJlX2NjZl9tYXRyaXgkcGxvdHNbMTo0XQpncmlkRXh0cmE6OmdyaWQuYXJyYW5nZShncm9icz1ncm9icywgbmNvbD0yLCBucm93ID0gMikKCgoKYGBgCgo=